package com.pureut.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.pureut.order.domain.SalesOrder;
import com.pureut.order.dto.SalesOrderDetailDto;
import com.pureut.order.dto.SalesOrderDto;
import com.pureut.order.dto.SalesOrderViewDto;
import com.pureut.order.vo.*;
import com.pureut.system.api.vo.UpdateDataBySchedulingVo;

import java.sql.SQLException;
import java.util.List;

/***
 *
 * Author:C
 * Date:2022/11/30 17:56
 * @DESC
 */
public interface SalesOrderService extends IService<SalesOrder> {

    /**
     * 销售订单列表
     */
    List<SalesOrderDto> getList(SalesOrderVo salesOrderVo);

    /**
     * 新增销售订单
     */
    boolean addSalesOrder(SalesOrderVo salesOrderVo) throws Exception;

    /**
     * 提交评审
     */
    boolean submitReview(Long id);

    /**
     * 撤销审核
     */
    boolean deleteReview(Long id);

    /**
     * 手动关结
     */
    boolean close(SalesOrderVo salesOrderVo);

    /**
     * 批量删除
     */
    boolean delete(String id);

    /**
     * 修改销售订单
     */
    boolean updateSalesOrder(SalesOrderVo salesOrderVo) throws SQLException;

    /**
     * 查看
     */
    SalesOrderViewDto getView(Long id);

    /**
     * 合同上传
     */
    boolean contractUpload(ContractUploadVo contractUploadVo) throws Exception;

    /**
     * 销售订单审核
     */
    boolean saleOrderReview(OrderReviewVo orderReviewVo);

    /**
     * 获取销售订单列表(其他模块调用)
     */
    List<SalesOrderDto> getSaleOrderList(SalesOrderVo salesOrderVo);

    /**
     * 排程模块回传数据，修改销售订单状态及数据（feign调用）
     */
    boolean updateDataByScheduling(UpdateDataBySchedulingVo updateDataBySchedulingVo);

    /**
     * 根据销售订单号及物料编码获取明细信息
     */
    SalesOrderDetailDto getDataBySaleNumberAndMaterialCode(String saleNumber, String materialCode);

    /**
     * 根据销售订单修改对应明细状态（生产计划 feign调用）
     */
    void updateSaleOrderDetailStatus(UpdateSaleOrderDetailStatusVo updateSaleOrderDetailStatusVo);

    /**
     * 成品称重页面回传数据至销售订单(成品称重 feign调用)
     */
    void backData(BackDataVo backDataVo);

    /**
     * 销售发货回传发货重量
     * @param backDataVo
     */
    boolean updateShippingWeight(BackDataVo backDataVo);

    /**
     * 销售发货回传发货重量（扣除）
     * @param backDataVo
     */
    boolean updateShippingWeightSub(BackDataVo backDataVo);

    /**
     * 销售退货回传退货重量
     * @param backDataVo
     * @return
     */
    boolean updateShippingOutWeight(BackDataVo backDataVo);

    boolean updateShippingWeightSubBack(BackDataVo backDataVo);

    /**
     * 委外入库回传销售订单明细委外重量(委外入库fegin调用)
     */
    boolean updateSubWeight(BackDataVo backDataVo);

    /**
     * 委外入库扣减销售订单明细委外重量(委外入库fegin调用)
     */
    boolean updateSubWeightDelete(BackDataVo backDataVo);

    /**
     * 修改销售订单明细的状态为已完成
     * @param backDataVo
     * @return
     */
    boolean updateSaleStatus(BackDataVo backDataVo);


    /**
     * 判断销售订单的明细状态，同步修改销售订单的状态
     * @param saleDocumentVo
     * @return
     */
    boolean updateSaleDocument(SaleDocumentVo saleDocumentVo);
}
